home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_52 / gamy.ma < prev    next >
Text File  |  1995-01-01  |  5KB  |  356 lines

  1. #
  2. # GAMELOT (sorry...)
  3. #
  4. # gamelan like  melody
  5. #
  6. # Taken from "Music of the Whole Earth", David Reck
  7. #
  8.  
  9. #
  10. # uses fb01 to take advantage of cents tuning.
  11. #
  12. # four modes, 3 slendo and 1 pelog
  13. # piece switches states between 3 slendo modes and 1 pelog
  14. # scale, that is not really setup for any particular mode.
  15. #
  16.  
  17. MAXNOTE = 18
  18. SLENDRONOTES = 16
  19. PELOGNOTES = 18
  20.  
  21. uchar snotes[MAXNOTE]
  22. uchar scents[MAXNOTE]
  23.  
  24. uchar mode            # current mode
  25. uchar melnote        # global melody note
  26. uchar meltime        # global melody time
  27. uchar counter
  28. uchar nonotes
  29.  
  30. # set up 5 tone slendro scale
  31. # slendro 5 tones are 263,223,253,236,225  cents apart in one octave
  32. # sets up a slendo scale, assuming 5 notes with correct cents
  33. # not used, but shows basic notes and cents. Key of C.
  34. #
  35. riff initSlendro()
  36.     snotes[0] = C
  37.     scents[0] = 0
  38.     snotes[1] = D
  39.     scents[1] = 63
  40.     snotes[2] = E
  41.     scents[2] = 86
  42.     snotes[3] = G
  43.     scents[3] = 39
  44.     snotes[4] = A
  45.     scents[4] = 75
  46. end
  47.  
  48. # 7 tone pelog scale
  49. # mode is lima
  50. #
  51. # C,C#,E,F,F#,A,B with appropriate cents
  52. #
  53. # 5 F
  54. # 4 B
  55. # 3 E
  56. #
  57. # 2 C
  58. # 2 A
  59. #  
  60. # 1 C#
  61. # 1 F#
  62. # 18 notes needed
  63. riff initPelog()
  64.     snotes[0] = C
  65.     scents[0] = 0
  66.     snotes[7] = HC
  67.     scents[7] = 0
  68.  
  69.     snotes[1] = C#
  70.     scents[1] = 67
  71.  
  72.     snotes[2] = E
  73.     scents[2] = 12
  74.     snotes[8] = HE  
  75.     scents[8] = 12
  76.     snotes[9] = HE
  77.     scents[9] = 12
  78.  
  79.     snotes[10] = HF
  80.     scents[10] = 37
  81.     snotes[3] = F
  82.     scents[3] = 37
  83.     snotes[17] = F
  84.     scents[17] = 37
  85.     snotes[16] = F
  86.     scents[16] = 37
  87.     snotes[15] = LF
  88.     scents[15] = 37
  89.  
  90.     snotes[4] = F#
  91.     scents[4] = 83
  92.  
  93.     snotes[5] = A
  94.     scents[5] = 35
  95.     snotes[12] = HA
  96.     scents[12] = 35
  97.  
  98.     snotes[14] = LB 
  99.     scents[14] = 0
  100.     snotes[6] = B 
  101.     scents[6] = 0
  102.     snotes[11] = HB
  103.     scents[11] = 0 
  104.     snotes[13] = B
  105.     scents[13] = 0 
  106.  
  107. end
  108.  
  109.  
  110. # nem mode
  111. # C,E,A emphasized, others are auxilliary
  112. # we span two octaves
  113. # 5 c
  114. # 4 e
  115. # 3 a
  116. # 2 d, 2 g
  117. riff initNem()
  118.     snotes[0] = C
  119.     scents[0] = 0
  120.     snotes[5] = HC
  121.     scents[5] = 0
  122.     snotes[6] = C
  123.     scents[6] = 0
  124.     snotes[7] = HC
  125.     scents[7] = 0
  126.     snotes[12] = LC
  127.     scents[12] = 0
  128.  
  129.     snotes[1] = D
  130.     scents[1] = 63
  131.     snotes[14] = HD
  132.     scents[14] = 63
  133.  
  134.     snotes[2] = E
  135.     scents[2] = 86
  136.     snotes[8] = HE
  137.     scents[8] = 86
  138.     snotes[9] = E
  139.     scents[9] = 86
  140.     snotes[10] = HE
  141.     scents[10] = 86
  142.  
  143.     snotes[3] = G
  144.     scents[3] = 39
  145.     snotes[15] = HG
  146.     scents[15] = 39
  147.  
  148.     snotes[4] = A
  149.     scents[4] = 75
  150.     snotes[11] = HA
  151.     scents[11] = 75
  152.     snotes[13] = HA
  153.     scents[13] = 75
  154.  
  155. end
  156.  
  157. # sanga mode
  158. #
  159. # 5 e 
  160. # 4 a
  161. # 3 d 
  162. # 2 c
  163. # 2 g
  164. riff initSanga()
  165.     snotes[0] = C
  166.     scents[0] = 0
  167.     snotes[14] = HC
  168.     scents[14] = 0
  169.  
  170.     snotes[1] = D
  171.     scents[1] = 63
  172.     snotes[5] = HD
  173.     scents[5] = 63
  174.     snotes[6] = D
  175.     scents[6] = 63
  176.  
  177.     snotes[7] = LE
  178.     scents[7] = 86
  179.     snotes[2] = E
  180.     scents[2] = 86
  181.     snotes[8] = HE
  182.     scents[8] = 86
  183.     snotes[9] = E
  184.     scents[9] = 86
  185.     snotes[10] = HE
  186.     scents[10] = 86
  187.  
  188.     snotes[3] = G
  189.     scents[3] = 39
  190.     snotes[15] = HG
  191.     scents[15] = 39
  192.  
  193.     snotes[4] = A
  194.     scents[4] = 75
  195.     snotes[11] = HA 
  196.     scents[11] = 75
  197.     snotes[12] = A
  198.     scents[12] = 75
  199.     snotes[13] = HA
  200.     scents[13] = 75
  201.  
  202. end
  203.  
  204. # slendro scale, manjura mode
  205. #
  206. #    5 g
  207. #    4 c
  208. #    3 e
  209. #    2 d
  210. #    2 a
  211. #
  212. riff initManjura()
  213.     snotes[0] = C
  214.     scents[0] = 0
  215.     snotes[5] = HC
  216.     scents[5] = 0
  217.     snotes[6] = C
  218.     scents[6] = 0
  219.     snotes[7] = HC
  220.     scents[7] = 0
  221.  
  222.     snotes[1] = D
  223.     scents[1] = 63
  224.     snotes[14] = HD
  225.     scents[14] = 63
  226.     
  227.     snotes[2] = E
  228.     scents[2] = 86
  229.     snotes[8] = HE
  230.     scents[8] = 86
  231.     snotes[9] = E
  232.     scents[9] = 86
  233.  
  234.     snotes[10] = LG
  235.     scents[10] = 39
  236.     snotes[3] = G
  237.     scents[3] = 39
  238.     snotes[11] = HG
  239.     scents[11] = 39
  240.     snotes[12] = G
  241.     scents[12] = 39
  242.     snotes[13] = HG
  243.     scents[13] = 39
  244.  
  245.     snotes[4] = A
  246.     scents[4] = 75
  247.     snotes[15] = HA
  248.     scents[15] = 75
  249. end
  250.  
  251. riff nextMode()
  252.     if ( mode == 0 )
  253.         nonotes = SLENDRONOTES
  254.         void initNem()
  255.         counter = 90
  256.         metro 85
  257.     else
  258.         if ( mode == 1 )
  259.             nonotes = SLENDRONOTES
  260.             void initSanga()
  261.             counter = 125
  262.             metro 145
  263.         else
  264.             if ( mode == 2)
  265.                 nonotes = SLENDRONOTES
  266.                 void initManjura()
  267.                 counter = 140
  268.                 metro 160
  269.             else
  270.                 nonotes = PELOGNOTES
  271.                 void initPelog()
  272.                 counter = 175
  273.                 metro 175
  274.             end
  275.         end
  276.     end
  277.     void printf("%d\n",mode)
  278.     mode++
  279.     if ( mode == 4)
  280.         mode = 0
  281.     end
  282. end
  283.  
  284. vco    s1
  285.     uchar sectcount
  286.  
  287.     counter = 0
  288.     mode = 0
  289.  
  290.     sectcount = 0
  291.  
  292.     for(;;)
  293.         # choose mode
  294.         if ( counter == 0 )
  295.             void nextMode()
  296.             sectcount++
  297.         end
  298.         counter--
  299.         #
  300.         # play note
  301.         #
  302.         melnote = mrandrange(0,nonotes)
  303.         if ( mrand() % 2 )
  304.             meltime = q
  305.         else
  306.             meltime = e
  307.         end
  308.         snotes[melnote] meltime    mrandrange(100,127)    scents[melnote]
  309.  
  310.     end
  311. end
  312.  
  313.  
  314. # one every 2 (may have double beat)
  315. vco low
  316.     uchar rval
  317.     for (;;)
  318.         rval = mrand() % 3
  319.         if (rval == 0)
  320.             snotes[melnote]-12    h mrandrange(100,127) scents[melnote]
  321.         else
  322.             snotes[melnote]-12    q mrandrange(100,127) scents[melnote]
  323.             snotes[melnote]-12    q mrandrange(100,127) scents[melnote]
  324.         end
  325.     end
  326. end
  327.  
  328. # one every 4
  329. vco lower
  330.     uchar nnote
  331.     for (;;)
  332.         snotes[melnote]-24    q    mrandrange(100,127) scents[melnote]
  333.         rest    q
  334.         rest    q
  335.         rest    q
  336.     end
  337. end
  338.  
  339.  
  340. # once every 16
  341. vco whole
  342.     uchar nnote
  343.     for (;;)
  344.         if ( {mrand() % 3} == 1)
  345.             snotes[melnote]-36    w 127 scents[melnote]
  346.         else
  347.             rest    w
  348.         end
  349.         rest    w
  350.         rest    w
  351.         rest    w
  352.     end
  353. end
  354.